
"""
给你一个字符串 s，由若干单词组成，单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。

单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。



示例 1：

输入：s = "Hello World"
输出：5
解释：最后一个单词是“World”，长度为 5。
示例 2：

输入：s = "   fly me   to   the moon  "
输出：4
解释：最后一个单词是“moon”，长度为 4。
示例 3：

输入：s = "luffy is still joyboy"
输出：6
解释：最后一个单词是长度为 6 的“joyboy”。


提示：

1 <= s.length <= 104
s 仅有英文字母和空格 ' ' 组成
s 中至少存在一个单词
"""

class Solution(object):
    def lengthOfLastWord(self, s):
        """
        :type s: str
        :rtype: int
        """
        # 从末尾开始，找单词，遇到空格的就跳过（防止末尾是空格）
        i = len(s) - 1
        j = 0

        while i >= 0 and s[i] == ' ':
            i -= 1

        while i >= 0 and s[i] != ' ':
            j += 1
            i -= 1

        return j


# 开始测试
soultion = Solution()

# 定义一些测试用例
tests = [
    ("Hello World", 5),
    ("   fly me   to   the moon  ", 4),
    ("luffy is still joyboy", 6),
    ("    The answer is 42", 2),
    (" Programming", 11),
    ("Hello", 5),
    ("  Spaceship  ", 9),
    ("a", 1),
    ("z  ", 1),
    (("a" * 100) + " " + ("b" * 4), 4),
    ((" " * 50) + "longword" + (" " * 46), 8),
    ("word" + (" " * 100) + "end", 3),
    ("abcdefghij", 10)
]

# 逐个测试
for i, (s, expected) in enumerate(tests):
    result = soultion.lengthOfLastWord(s)
    status = "通过✅" if result == expected else "失败❌"
    print(f"测试 {i + 1}: {status} | 输入: '{s}'")
    print(f"    期望: {expected}, 实际: {result}\n")

print("\n重要边界测试:")
# 最大长度测试（需要时启用，输出较冗长）
# long_str = "a" * 104
# print(f"最大长度测试(104字符): {lengthOfLastWord(long_str)} (预期:104)")

long_str = ("x" * 50) + " " + ("y" * 54)
print(f"边界长度测试(105字符): {soultion.lengthOfLastWord(long_str)} (预期:54)")
